﻿using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

public static class ErrorReporter
{
    // 默认配置（适配 Cursor 服务）
    private static string _baseUrl = "https://api.cursor.com/report"; // 替换为实际的 Cursor API 地址
    private static string _apiKey = string.Empty; // Cursor 的 API 密钥（如有）

    // 单例 HttpClient 实例（线程安全）
    private static readonly HttpClient _httpClient = new HttpClient();

    // 初始化配置
    public static void Initialize(string baseUrl, string apiKey = null)
    {
        _baseUrl = baseUrl;
        _apiKey = apiKey;

        // 设置默认请求头（如 Cursor API 需要认证）
        if (!string.IsNullOrEmpty(_apiKey))
        {
            _httpClient.DefaultRequestHeaders.Add("X-API-Key", _apiKey); // Cursor 可能使用 API Key 认证
        }
    }

    // 核心方法：发送异常错误报告到 Cursor
    public static async Task ReportExceptionAsync(Exception ex, string additionalInfo = null)
    {
        try
        {
            // 可选：本地日志记录（可扩展）
            LogInternal(ex, additionalInfo);

            // 构造错误信息
            var errorMessage = new
            {
                message = ex.Message,
                stackTrace = ex.StackTrace,
                additionalInfo = additionalInfo,
                timestamp = DateTime.UtcNow,
                source = "Application" // 可选：标识来源
            };

            var json = Newtonsoft.Json.JsonConvert.SerializeObject(errorMessage);
            var content = new StringContent(json, Encoding.UTF8, "application/json");

            // 发送 POST 请求
            var response = await _httpClient.PostAsync(_baseUrl, content);
            response.EnsureSuccessStatusCode(); // 如果响应不是 200 系列，会抛出异常

            // 可选：处理响应内容
            var responseContent = await response.Content.ReadAsStringAsync();
            Console.WriteLine($"[ErrorReporter] 错误已上报到 Cursor，响应内容：{responseContent}");
        }
        catch (Exception sendEx)
        {
            Console.WriteLine($"[ErrorReporter] 上报错误失败：{sendEx.Message}");
        }
    }

    // 可选：本地日志记录器（可替换为 Serilog、NLog 等）
    private static void LogInternal(Exception ex, string additionalInfo)
    {
        Console.WriteLine($"[Local Log - Cursor] 异常发生: {ex.Message}");
        Console.WriteLine();
        if (!string.IsNullOrEmpty(additionalInfo))
        {
            Console.WriteLine($"附加信息: {additionalInfo}");
        }
    }
}